package com.base.common.edu.util;

import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

/**
 * @Author Maple.Chen
 * @Description 文件上传的工具
 * @Date 17:20 2020/5/21
 **/
public class FileUtil {

    /*
    SpringBoot项目中获得项目（在Linux）的实际路径
     */
    public static String getRealPathOfProject(){
        /***
         * 返回项目在Linu服务器上的根路径。
         * （ps：不知道是不是springboot内嵌tomcat容器的原因，
         *         用网上的request.getServletContext().getRealPath("/")方法获得的路径不是项目路径，
         *                 Windows：是c盘下一个tomcat目录路径
         *                 Linux: 是一个带时间戳多层混合的临时目录/tmp）
         */
        return System.getProperty("user.dir");
    }

    /*
    判断文件或路径是否存在，不存在即创建
     */
    public static boolean createFileOrPath( String fullPath ) {
        File dirOrFile = new File(fullPath);
        if (!dirOrFile.exists())
            dirOrFile.mkdirs();
        return true;
    }

    /*
    删除文件，有则删除，无则不操作
     */
    public static boolean deleteFile(String fileAndPath) {
        File file = new File(fileAndPath);
        if (file.exists())
            file.delete();
        return true;
    }

    /*
    由文件名解析出文件的扩展名
     */
    public static String getFileNameEnds(String fileFullName) {
        int lastIdx = fileFullName.lastIndexOf(".");
        if (lastIdx < 1) {
            return "";
        } else {
            return fileFullName.substring(lastIdx);
        }
    }

    /*
    由文件名解析出文件名，不含扩展名
     */
    public static String getFileNameExcludingEnds(String fileFullName) {
        int lastIdx = fileFullName.lastIndexOf(".");
        if (lastIdx < 1) {
            return fileFullName;
        } else {
            return fileFullName.substring(0, lastIdx);
        }
    }

    /*
    上传的文件保存
     */
    public static boolean saveFile(MultipartFile file, String saveToPath) {
        try {
            file.transferTo(new File(saveToPath));
        } catch (IllegalStateException | IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
}
